package com.pengcheng.hnweb.util;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Component
public class MenuUtil {
    @Autowired
    private Common common;
    public String get_url(HttpServletRequest request)
    {
        String requestUri = request.getRequestURI();
        String queryString = request.getQueryString();
        return requestUri + (queryString != null ? "?" + queryString : "");
    }
    public Map<String,Object> get_row_menu(String url, List<Map<String,Object>> rows_menu)
    {
        int index=-1;
        for(int i=0;i<rows_menu.size();i++)
        {
            Object temp_url=rows_menu.get(i).get("url");
            if(temp_url!=null&&temp_url.toString().equals(url))
            {
                index=i;
                i= rows_menu.size();
            }
        }
        if(index>=0)
        {
            return rows_menu.get(index);
        }
        return null;
    }
    public List<Map<String,Object>> get_menu_path(Map<String,Object> row_menu,List<Map<String,Object>> rows_menu)
    {
        List<Map<String,Object>> list_menu=new ArrayList<>();
        list_menu.add(row_menu);
        int pid=Integer.parseInt(row_menu.get("pid").toString());
        while(pid!=0)
        {
            int index=-1;
            for(int i=0;i<rows_menu.size();i++)
            {
                if(rows_menu.get(i).get("id").toString().equals(pid+""))
                {
                    index=i;
                    i=rows_menu.size();
                }
            }
            if(index>=0)
            {
                list_menu.add(rows_menu.get(index));
                pid=Integer.parseInt(rows_menu.get(index).get("pid").toString());
            }
            else {
                pid=0;
            }
        }
        Collections.reverse(list_menu);
        return list_menu;
    }
    //根据权限获取相应的菜单信息
    public List<Map<String,Object>> get_power_menu(List<Map<String,Object>> rows_menu,List<Map<String,Object>> rows_roledetail)
    {
        if(rows_menu!=null&&rows_roledetail!=null)
        {
            for(int i=rows_menu.size()-1;i>=0;i--)
            {
                if(rows_menu.get(i).get("rows_cmenu")==null)
                {
                    rows_menu.remove(i);
                }
                else {
                    List<Map<String,Object>> rows_cmenu=(List<Map<String,Object>>)rows_menu.get(i).get("rows_cmenu");
                    if(rows_cmenu==null)
                    {
                        rows_menu.remove(i);
                    }
                    else {
                        for(int j=rows_cmenu.size()-1;j>=0;j--)
                        {
                            Map<String,Object> row_cmenu=rows_cmenu.get(j);
                            Object id=row_cmenu.get("id");
                            if(id==null)
                            {
                                rows_cmenu.remove(j);
                            }
                            else {
                                int index=-1;
                                for(int k=0;k<rows_roledetail.size();k++)
                                {
                                    if(rows_roledetail.get(k).get("menu_id")!=null&&rows_roledetail.get(k).get("menu_id").toString().equals(id.toString()))
                                    {
                                        index=k;
                                        k=rows_roledetail.size();
                                    }
                                }
                                if(index==-1||rows_roledetail.get(index).get("power")==null)
                                {
                                    rows_cmenu.remove(j);
                                }
                                else {
                                    String[] list_power=rows_roledetail.get(index).get("power").toString().split(",");
                                    if(common.find_in_array("0",list_power)==-1)
                                    {
                                        rows_cmenu.remove(j);
                                    }
                                }
                            }
                        }
                    }
                    if(rows_cmenu.size()==0)
                    {
                        rows_menu.remove(i);
                    }
                }
            }
        }
        return rows_menu;
    }
}
